//删除倒数元素
import linkListDefine.ListNode;


/**
 * 删除倒数的某个元素
 * 使用快慢指针，只要当快指针，指向null的时候，慢指针指向的就是目标元素
 * fast、slow其实应该还要判断index是否合法，如果当fast为null时，而slow仍然等于虚拟头结点时，说明，index不合法，已经超过了链表的长度，返回null
 */
public class deleteReciprocalNode {
    public ListNode delete(ListNode list,int index){
        int num = 0;//表示快慢指针相差多少个位置
        var head = new ListNode(-1,list);//创建虚拟头结点，方便删除第一个元素
        ListNode fast = head;
        ListNode slow = head;
        while (fast!=null){
            if(num<index+1){
                fast = fast.next;
                num++;
                continue;
            }
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return head.next;
    }
    public static void main(String[] args) {
        ListNode list = ListNode.createList(new int[]{1,2,3,4,5,6,7,8});
        var main = new deleteReciprocalNode();
        ListNode res= main.delete(list,8);
        ListNode.printList(res);
    }
}
